package com.example.photography;

import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.util.Log;

import com.alibaba.sdk.android.push.CloudPushService;
import com.alibaba.sdk.android.push.CommonCallback;
import com.alibaba.sdk.android.push.noonesdk.PushServiceFactory;
import com.example.photography.Activity.UpdateActivity;
import com.example.photography.common.Constant;
import com.example.photography.common.CrashHandler;
import com.example.photography.util.UIUtils;
import com.example.photography.util.Util;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.hyphenate.chat.EMClient;
import com.hyphenate.chat.EMOptions;
import com.hyphenate.easeui.EaseIM;
import com.mob.pushsdk.MobPush;
import com.mob.pushsdk.MobPushCustomMessage;
import com.mob.pushsdk.MobPushNotifyMessage;
import com.mob.pushsdk.MobPushReceiver;

import java.util.HashMap;

import dagger.hilt.android.HiltAndroidApp;
import pl.com.salsoft.sqlitestudioremote.SQLiteStudioService;


//程序入口
@HiltAndroidApp
public class MyApplication extends Application {
    private static final String TAG = "Init";
    public static Context mContext;//需要使用的上下文对象：application实例
    public static Handler mhandler;//需要使用的handler
    public static Thread mainThread;//提供主线程对象
    public static int mainThreadId;//提供主线程对象的id
    @Override
    public void onCreate() {
        super.onCreate();

        //初始化全局上下文对象
        mContext = this;
        mhandler = new Handler();
        //初始化数据模型层类
        Model.getInstance().init(this);
        mainThread = Thread.currentThread();//实例化当前Application的线程即为主线程
        mainThreadId = android.os.Process.myTid();//获取当前线程的id

        //设置未捕获异常的处理器
        CrashHandler.getInstance().init();
        /**
         * 连接SQLiteStudio
         */
        SQLiteStudioService.instance().start(this);
        /**
         * 初始化Fresco类
         */
        Fresco.initialize(this);
        /**
         * 初始化阿里移动推送
         */
        initCloudChannel(this);
        /**
         * 初始化环信IM
         */
        EMOptions options = new EMOptions();
        // 默认添加好友时，是不需要验证的，改成需要验证
        options.setAcceptInvitationAlways(false);
        // 是否自动将消息附件上传到环信服务器，默认为True是使用环信服务器上传下载，如果设为 false，需要开发者自己处理附件消息的上传和下载
        options.setAutoTransferMessageAttachments(true);
        // 是否自动下载附件类消息的缩略图等，默认为 true 这里和上边这个参数相关联
        options.setAutoDownloadThumbnail(true);
        //EaseIM初始化
        if(EaseIM.getInstance().init(mContext, options)){
            //在做打包混淆时，关闭debug模式，避免消耗不必要的资源
            EMClient.getInstance().setDebugMode(true);
            //EaseIM初始化成功之后再去调用注册消息监听的代码 ...
        }

        //初始化
        EMClient.getInstance().init(mContext, options);
        //在做打包混淆时，关闭debug模式，避免消耗不必要的资源
        EMClient.getInstance().setDebugMode(true);

    }
    /**
     * 初始化云推送通道
     * @param applicationContext
     */
    private void initCloudChannel(Context applicationContext) {
        PushServiceFactory.init(applicationContext);
        CloudPushService pushService = PushServiceFactory.getCloudPushService();
        pushService.register(applicationContext, new CommonCallback() {
            @Override
            public void onSuccess(String response) {

                Log.d(TAG, "init cloudchannel success");
            }
            @Override
            public void onFailed(String errorCode, String errorMessage) {
                Log.d(TAG, "init cloudchannel failed -- errorcode:" + errorCode + " -- errorMessage:" + errorMessage);
            }
        });
    }




    //获取全局上下文对象
    public static Context getGlobalApplication(){
        return mContext;
    }
}